package logic

type BasePageLogic struct {
	Page     int32
	PerPage  int32
	NextPage int32
	Total    int64
}

func (bpl *BasePageLogic) init() {
	bpl.NextPage = 0
	bpl.Total = 0
}

// SetPage 设置当前页码
func (bpl *BasePageLogic) SetPage(page *int32) {
	bpl.init()
	if page != nil {
		bpl.Page = *page
	}
}

// SetPerPage 设置每页数量
func (bpl *BasePageLogic) SetPerPage(perPage *int32) {
	bpl.init()
	if perPage != nil {
		bpl.PerPage = *perPage
	}
}

func (bpl *BasePageLogic) SetTotal(total int64) {
	bpl.Total = total
}

// GetCurrentPage 获取当前页码
func (bpl *BasePageLogic) GetCurrentPage() int32 {
	return bpl.Page
}

// GetNextPage 获取下一页的页码
func (bpl *BasePageLogic) GetNextPage() int32 {
	page := bpl.Page + 1
	if bpl.Total > int64(bpl.PerPage*page) {
		bpl.NextPage = bpl.Page + 1
	} else {
		bpl.NextPage = 0
	}
	return bpl.NextPage
}

func (bpl *BasePageLogic) GetTotal() int64 {
	return bpl.Total
}

func (bpl *BasePageLogic) GetPerPage() int32 {
	return bpl.PerPage
}

func (bpl *BasePageLogic) GetOffset() int {
	return int(bpl.Page * bpl.PerPage)
}
